#include <iostream>
using namespace std;

//重载递增运算符

//自定义整型
class MyInteger
{
    friend ostream& operator<<(ostream& cout, MyInteger& myint);
    
public:
    MyInteger()
    {
        num = 0;
    }

    //重载前置++运算符  返回引用是为了一直对一个数据进行递增操作
    //前置递增原理：对对象本身进行自增，不断地返回对象本身；
    MyInteger& operator++()
    {
        num++;
        return *this;
    }

    //重载后置++运算符
    //int代表占位参数，可以用于区分前置or后置递增
    //后置递增原理：创建一个新对象  先对原对象本身进行自增，然后返回新对象 ；
    MyInteger& operator++(int)
    {
        //先 记录当时结果
        MyInteger* temp = new MyInteger(*this);
        //后 递增
        num++;
        //最后 将记录结果返回
        return *temp;
    }
private:
    int num;
};

//重载<<运算符
ostream& operator<<(ostream& cout, MyInteger& myint)
{
    cout << myint.num;
    return cout;
}

void test1()
{
    MyInteger myint;
    cout << ++(++myint) << endl;
    cout << myint << endl;
}

void test2()
{
    MyInteger myint2;
    
    cout << myint2++ << endl;
    cout << myint2 << endl;
}

int main()
{
    test1();
    cout << "-------------------" << endl;
    test2();
    return 0;
}